#include "systemCallHandler.h"
#include "fileSystemHandler.h"
#include "inputOutputHandler.h"
#include "mathHandler.h"
#include "stringHandler.h"
#include "systemInfoHandler.h"

/**
 * @brief SystemCallHandler构造函数
 * @param parent 父对象指针
 */
SystemCallHandler::SystemCallHandler(QObject *parent)
    : QObject(parent)
{
    // 基类构造函数，不需要特殊初始化
}

/**
 * @brief 创建成功的系统调用结果
 * @param returnValues 返回值映射
 * @return SystemCallResult 成功结果
 */
SystemCallResult SystemCallHandler::createSuccessResult(const QMap<QString, int>& returnValues)
{
    SystemCallResult result;
    result.success = true;
    result.errorCode = 0;
    result.errorMessage = "";
    result.returnValues = returnValues;
    return result;
}

/**
 * @brief 创建失败的系统调用结果
 * @param errorCode 错误代码
 * @param errorMessage 错误信息
 * @return SystemCallResult 失败结果
 */
SystemCallResult SystemCallHandler::createErrorResult(int errorCode, const QString& errorMessage)
{
    SystemCallResult result;
    result.success = false;
    result.errorCode = errorCode;
    result.errorMessage = errorMessage;
    return result;
}

/**
 * @brief 验证中断号是否在支持范围内
 * @param interruptNumber 中断号
 * @return bool 是否支持
 */
bool SystemCallHandler::isInterruptSupported(int interruptNumber) const
{
    QPair<int, int> range = getSupportedInterruptRange();
    return (interruptNumber >= range.first && interruptNumber <= range.second);
}

// SystemCallHandlerFactory实现

/**
 * @brief 创建文件系统处理器
 * @param parent 父对象
 * @return std::unique_ptr<SystemCallHandler> 处理器智能指针
 */
std::unique_ptr<SystemCallHandler> SystemCallHandlerFactory::createFileSystemHandler(QObject* parent)
{
    return std::unique_ptr<SystemCallHandler>(new FileSystemHandler(parent));
}

/**
 * @brief 创建输入输出处理器
 * @param parent 父对象
 * @return std::unique_ptr<SystemCallHandler> 处理器智能指针
 */
std::unique_ptr<SystemCallHandler> SystemCallHandlerFactory::createInputOutputHandler(QObject* parent)
{
    return std::unique_ptr<SystemCallHandler>(new InputOutputHandler(parent));
}

/**
 * @brief 创建数学运算处理器
 * @param parent 父对象
 * @return std::unique_ptr<SystemCallHandler> 处理器智能指针
 */
std::unique_ptr<SystemCallHandler> SystemCallHandlerFactory::createMathHandler(QObject* parent)
{
    return std::unique_ptr<SystemCallHandler>(new MathHandler(parent));
}

/**
 * @brief 创建字符串处理器
 * @param parent 父对象
 * @return std::unique_ptr<SystemCallHandler> 处理器智能指针
 */
std::unique_ptr<SystemCallHandler> SystemCallHandlerFactory::createStringHandler(QObject* parent)
{
    return std::unique_ptr<SystemCallHandler>(new StringHandler(parent));
}

/**
 * @brief 创建系统信息处理器
 * @param parent 父对象
 * @return std::unique_ptr<SystemCallHandler> 处理器智能指针
 */
std::unique_ptr<SystemCallHandler> SystemCallHandlerFactory::createSystemInfoHandler(QObject* parent)
{
    return std::unique_ptr<SystemCallHandler>(new SystemInfoHandler(parent));
} 